package org.jjche.sys.modules.fillrule.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.ibatis.annotations.Param;
import org.jjche.common.param.MyPage;
import org.jjche.common.param.PageParam;
import org.jjche.mybatis.base.MyBaseMapper;
import org.jjche.mybatis.param.SortEnum;
import org.jjche.mybatis.util.MybatisUtil;
import org.jjche.sys.modules.fillrule.domain.SysFillRuleDO;
import org.jjche.sys.modules.fillrule.dto.SysFillRuleQueryCriteriaDTO;
import org.jjche.sys.modules.fillrule.vo.SysFillRuleVO;

import java.util.List;

/**
* <p>
* 系统编码规则
* </p>
*
* @author miaoyj
* @since 2024-05-11
*/
public interface SysFillRuleMapper extends MyBaseMapper<SysFillRuleDO> {

    /**
    * <p>
    * 获取列表查询语句
    * </p>
    *
    * @param query 条件
    * @return sql
    */
    default LambdaQueryWrapper queryWrapper(SysFillRuleQueryCriteriaDTO query) {
        return MybatisUtil.assemblyLambdaQueryWrapper(query, SortEnum.ID_DESC);
    }

    /**
     * <p>
     * 获取对象根据编码
     * </p>
     *
     * @param code
    * @return /
     */
    default SysFillRuleDO getByCode(String code){
        LambdaQueryWrapper<SysFillRuleDO> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(SysFillRuleDO::getCode, code);
        return this.selectOne(queryWrapper);
    }

    /**
     * <p>
     * 获取对象根据编码和不等于id
     * </p>
     *
     * @param code 编码
     * @param id /
     * @return /
     */
    default SysFillRuleDO getByCodeAndNeId(String code, Long id){
        LambdaQueryWrapper<SysFillRuleDO> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(SysFillRuleDO::getCode, code);
        queryWrapper.ne(SysFillRuleDO::getId, id);
        return this.selectOne(queryWrapper);
    }

    /**
    * <p>
    * 查询数据分页
    * </p>
    * @param query 条件
    * @param page 分页
    * @return SysFillRuleVO 分页
    */
    default MyPage<SysFillRuleVO> page(PageParam page, SysFillRuleQueryCriteriaDTO query) {
        LambdaQueryWrapper<SysFillRuleDO> queryWrapper = queryWrapper(query);
        return this.selectPage(page, queryWrapper);
    }

    /**
    * <p>
    * 查询所有数据不分页
    * </p>
    * @param query 条件
    * @return SysFillRuleVO 列表对象
    */
    default List<SysFillRuleDO> list(SysFillRuleQueryCriteriaDTO query){
      LambdaQueryWrapper<SysFillRuleDO> queryWrapper = queryWrapper(query);
      return this.selectList(queryWrapper);
    }

    /**
    * <p>
    * 分页查询
    * </p>
    *
    * @param page 分页
    * @param wrapper 自定义sql
    * @return 分页VO
    */
    MyPage<SysFillRuleVO> pageQuery(PageParam page, @Param(Constants.WRAPPER) Wrapper wrapper);

}
